From d1c22b7f8394d9cf0ad40d30a9756b744939e5bf Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Mon, 19 Oct 2009 10:48:47 +0100 Subject: [PATCH] xm,xend: Add commands to hotplug usb devices to hvm guests Signed-off-by: James Song Wei --- tools/python/xen/xend/XendDomain.py | 39 +++++++++++++++++++++++ tools/python/xen/xend/server/SrvDomain.py | 13 ++++++++ tools/python/xen/xm/main.py | 18 +++++++++++ 3 files changed, 70 insertions(+) diff --git a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py index 9c8516de27..55e8380f6a 100644 --- a/tools/python/xen/xend/XendDomain.py +++ b/tools/python/xen/xend/XendDomain.py @@ -1522,6 +1522,45 @@ class XendDomain: raise XendError("can't write guest state file %s: %s" % (dst, ex[1])) + def domain_usb_add(self, domid, dev_id): + dominfo = self.domain_lookup_nr(domid) + if not dominfo: + raise XendInvalidDomain(str(domid)) + + usb = dominfo.info['platform'].get('usb') + if not usb: + raise XendError("Can't add usb device to a guest with usb disabled in configure file") + + hvm = dominfo.info.is_hvm() + if not hvm: + raise XendError("Can't add usb device to a non-hvm guest") + + if dominfo._stateGet() != DOM_STATE_HALTED: + dominfo.image.signalDeviceModel("usb-add", + "usb-added", dev_id) + else: + log.debug("error: Domain is not running!") + + + def domain_usb_del(self, domid, dev_id): + dominfo = self.domain_lookup_nr(domid) + if not dominfo: + raise XendInvalidDomain(str(domid)) + + usb = dominfo.info['platform'].get('usb') + if not usb: + raise XendError("Can't add usb device to a guest with usb disabled in configure file") + + hvm = dominfo.info.is_hvm() + if not hvm: + raise XendError("Can't del usb to a non-hvm guest") + + if dominfo._stateGet() != DOM_STATE_HALTED: + dominfo.image.signalDeviceModel("usb-del", + "usb-deleted", dev_id) + else: + log.debug("error: Domain is not running!") + def domain_pincpu(self, domid, vcpu, cpumap): """Set which cpus vcpu can use diff --git a/tools/python/xen/xend/server/SrvDomain.py b/tools/python/xen/xend/server/SrvDomain.py index 97887af61a..3d9868f984 100644 --- a/tools/python/xen/xend/server/SrvDomain.py +++ b/tools/python/xen/xend/server/SrvDomain.py @@ -225,6 +225,19 @@ class SrvDomain(SrvDir): self.acceptCommand(req) return self.xd.domain_reset(self.dom.getName()) + def op_usb_add(self, op, req): + self.acceptCommand(req) + return req.threadRequest(self.do_usb_add, op, req) + + def do_usb_add(self, _, req): + return self.xd.domain_usb_add(self.dom.getName(), req) + + def op_usb_del(self, op, req): + self.acceptCommand(req) + return req.threadRequest(self.do_usb_add, op, req) + + def do_usb_del(self, _, req): + return self.xd.domain_usb_add(self.dom.getName(), req) def render_POST(self, req): return self.perform(req) diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index 8372b08f58..94236a6ab7 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -161,6 +161,9 @@ SUBCOMMAND_HELP = { 'vcpu-set' : (' ', 'Set the number of active VCPUs for allowed for the' ' domain.'), + #usb + 'usb-add' : (' <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'), + 'usb-del' : (' <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'), # device commands @@ -351,6 +354,8 @@ common_commands = [ "top", "unpause", "uptime", + "usb-add", + "usb-del", "vcpu-set", ] @@ -383,6 +388,8 @@ domain_commands = [ "top", "unpause", "uptime", + "usb-add", + "usb-del", "vcpu-list", "vcpu-pin", "vcpu-set", @@ -1474,6 +1481,14 @@ def xm_mem_set(args): else: mem_target = int_unit(args[1], 'm') server.xend.domain.setMemoryTarget(dom, mem_target) + +def xm_usb_add(args): + arg_check(args, "usb-add", 2) + server.xend.domain.usb_add(args[0],args[1]) + +def xm_usb_del(args): + arg_check(args, "usb-del", 2) + server.xend.domain.usb_del(args[0],args[1]) def xm_vcpu_set(args): arg_check(args, "vcpu-set", 2) @@ -3312,6 +3327,9 @@ commands = { "tmem-set": xm_tmem_set, "tmem-freeable": xm_tmem_freeable_mb, "tmem-shared-auth": xm_tmem_shared_auth, + #usb + "usb-add": xm_usb_add, + "usb-del": xm_usb_del, } ## The commands supported by a separate argument parser in xend.xm. -- 2.30.2